// 用户相关的模块, 这个模块后期自己写
import { reqGetUserDetailById, reqGetUserInfo, reqLogin } from '@/api/user'
import { setTokenInfo, getTokenInfo } from '@/utils/auth'
import { resetRouter } from '@/router'
export default {
  namespaced: true,
  state: {
    token: getTokenInfo() || '', // 用户的token信息 优先从cookie中获取
    userInfo: {} // 个人信息
  },
  mutations: {
    // 设置token值的mutation
    setToken(state, tokenInfo) {
      state.token = tokenInfo
      // 本地存储 localStorage实现本地存储的 cookie也可以实现数据的持久化存储
      setTokenInfo(tokenInfo)
    },
    // 设置个人信息的mutation
    setUserInfo(state, info) {
      state.userInfo = info
    }
  },
  // action可以包含任何异步操作, 不能直接修改state, 提交mutation
  actions: {
    // 发送登录请求的action
    async handleLogin(context, loginForm) {
      const res = await reqLogin(loginForm)
      // 提交mutation存储token
      context.commit('setToken', res.data)
      return res // 要在login.vue文件中依据这个响应的结果做消息提示
    },
    // 获取个人基本信息的action 主要发送请求
    async getUserInfo(context) {
      const res = await reqGetUserInfo()
      const result = await reqGetUserDetailById(res.data.userId)
      // console.log(result)
      // 合并两次个人信息的资料
      const info = { ...res.data, ...result.data }
      context.commit('setUserInfo', info)
      return info
    },
    // 这个action是对用户信息和token重置的action
    resetToken_userInfo({ commit }) {
      // 清除token
      commit('setToken', '')
      // 清除个人信息
      commit('setUserInfo', {})
      // 重置路由规则并重置路由 { root: true } 表示从根模块中查找
      // commit('router/resetRoutes', null, { root: true })
      commit('router/setRoutes', [], { root: true })
      // 重置路由
      resetRouter()
      // 将颜色还原为默认主题色
      commit('settings/resetTheme', null, { root: true })
    }
  }
}
